package com.itheima.springbootwebtlias.controller;


import com.itheima.springbootwebtlias.pojo.Clazz;
import com.itheima.springbootwebtlias.pojo.ClazzQuerParam;
import com.itheima.springbootwebtlias.pojo.PageResult;
import com.itheima.springbootwebtlias.pojo.Result;
import com.itheima.springbootwebtlias.service.ClazzService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;

@Slf4j
@RequestMapping("/clazzs")
@RestController
public class ClazzController {

    @Autowired
    private ClazzService clazzService;


    //添加班级。
    @PostMapping
    public Result addClazz(@RequestBody Clazz clazz){

        //1.接收请求参数
        log.info("请求参数：" + clazz);

        //2.调用业务层方法

        clazzService.addClazz(clazz);

        //3.封装数据并返回

        return Result.success();

    }


    //查看所有班级
    @GetMapping("/list")
    public Result getALLClazz(){
        //1.接受请求数据
        log.info("接收参数：无");

        //2.调用业务层方法
        List<Clazz> clazz = clazzService.getAllClazz();

        log.info("查询结果" + clazz);
        //3.返回结果
        return Result.success(clazz);
    }

    //班级列表查看
    @GetMapping
    public Result page(ClazzQuerParam clazzQuerParam){

        LocalDate begin = clazzQuerParam.getBegin();
        LocalDate end = clazzQuerParam.getEnd();
        log.info("开班：" + begin +  "\n" + "结班：" + end + "\n");
        //1.接收请求参数

        log.info("请求参数：" + clazzQuerParam);

        //2.调用业务层方法，并用pageResult封装
        PageResult page = clazzService.page(clazzQuerParam);

        log.info("返回结果：" + page);

        //3.封装返回参数
        return Result.success(page);
    }

    @GetMapping("/{id}")
    public Result selectByIdClazz(@PathVariable Integer id){
        //1.接受请求参数
        log.info("请求参数：" + id);
        //2.调用业务层方法
        Clazz list =clazzService.selectByIdClazz(id);
        log.info("返回结果：" + list);
        //3.封装返回结果
        return Result.success(list);
    }

    @PutMapping
    public Result updateClazz(@RequestBody Clazz clazz){
        //1，将诶胡搜请求参数
        log.info("请求参数：" + clazz);
        //2.调用业务层方法
        clazzService.updateClazz(clazz);

        //3.封装返回参数
        return Result.success();
    }

    @DeleteMapping("/{id}")
    public Result deleteByIdClazz(@PathVariable Integer id){
        //1。接受亲够参数
        log.info("请求参数：" + id);
        //2.调用业务层方法
        clazzService.deleteByIdClazz(id);
        //3.返回结果
        return Result.success();
    }
}
